home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-68k-src / machines / amiga68k / libsrc / stdio / fwrite.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  875b  |  33 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <proto/dos.h>
  5.  
  6. size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *f)
  7. {
  8.     size_t total=size*nmemb;char *p=ptr;long result;
  9.     if(!f||!total) return(0);
  10.     if((f->flags&(_WRITEABLE|_READ|_ERR|_EOF))!=_WRITEABLE) return(0);
  11.     f->flags|=_WRITE;
  12.     if(!f->bufsize){if(f->flags&_UNBUF) f->bufsize=1; else f->bufsize=BUFSIZ;}
  13.     if(!f->base){
  14.         if(!(f->base=(char *)malloc(f->bufsize+1)+1))
  15.             return 0;
  16.         f->pointer=f->base;
  17.         f->count=f->bufsize;
  18.     }
  19.     if(f->count==0) _flushbuf(f);
  20.     if(total<f->count){
  21.         memcpy(f->pointer,p,total);
  22.         f->pointer+=total;
  23.         f->count-=total;
  24.         f->flags|=_WRITE;
  25.         return nmemb;
  26.     }
  27.     _flushbuf(f);
  28.     result=Write((BPTR)f->filehandle,p,total);
  29.     if(result==-1){f->flags|=_ERR;return(0);}
  30.     return(result/size);
  31. }
  32.  
  33.